package com.lotus.lqmp.service.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lotus.lqmp.base.biz.bean.PageQuery;
import com.lotus.lqmp.service.biz.ReviewPlanBizService;
import com.lotus.lqmp.service.controller.vo.req.ReviewPlanAddReq;
import com.lotus.lqmp.service.controller.vo.req.ReviewPlanQueryReq;
import com.lotus.lqmp.service.controller.vo.req.ReviewPlanUpdateReq;
import com.lotus.lqmp.service.controller.vo.resp.ReviewPlanDeletedQueryResp;
import com.lotus.lqmp.service.controller.vo.resp.ReviewPlanQueryResp;
import com.lotus.platform.common.model.base.BaseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

/**
 * 评审计划表Controller
 * @author Shiheng.Liu1
 * @date 2022-03-29
 */
@RestController
@RequestMapping("/api/review-plan")
@Api(tags = "评审计划相关")
public class ReviewPlanController {
    @Autowired
    private ReviewPlanBizService reviewPlanBizService;

    /**
     * 分页查询
     * @param queryInfo 分页查询条件
     * @return 分页结果
     */
    @PostMapping("/page")
    @ApiOperation("评审计划分页查询")
    public BaseResult<Page<ReviewPlanQueryResp>> queryForPage(@RequestBody PageQuery<ReviewPlanQueryReq> queryInfo) {
        return BaseResult.ok(reviewPlanBizService.queryForPage(queryInfo));
    }

    /**
     * 评审计划批量删除
     * @param ids id集合
     */
    @PostMapping("/delete")
    @ApiOperation("评审计划批量删除")
    public BaseResult<Void> batchDeleteByIds(@RequestBody List<Long> ids) {
        reviewPlanBizService.batchDeleteByIds(ids);
        return BaseResult.ok();
    }

    /**
     * 评审计划更新
     * @param reviewPlanUpdateReq 更新参数
     */
    @ApiOperation("评审计划更新")
    @PostMapping("/update")
    public BaseResult<Void> update(@RequestBody @Valid ReviewPlanUpdateReq reviewPlanUpdateReq) {
        reviewPlanBizService.update(reviewPlanUpdateReq);
        return BaseResult.ok();
    }

    /**
     * 新增评审计划
     * @param reviewPlanAddReq 新增参数
     */
    @PostMapping("/add")
    @ApiOperation("评审计划新增")
    public BaseResult<Void> add(@RequestBody @Valid ReviewPlanAddReq reviewPlanAddReq) {
        reviewPlanBizService.add(reviewPlanAddReq);
        return BaseResult.ok();
    }

    /**
     * 删除的评审计划分页查询
     * @param queryInfo 分页查询条件
     * @return 分页结果
     */
    @PostMapping("/deleted/page")
    @ApiOperation("删除的评审计划分页查询")
    public BaseResult<Page<ReviewPlanDeletedQueryResp>> queryDeletedForPage(
        @RequestBody PageQuery<ReviewPlanQueryReq> queryInfo) {
        return BaseResult.ok(reviewPlanBizService.queryDeletedForPage(queryInfo));
    }

    /**
     * 批量还原
     * @param ids id集合
     */
    @ApiOperation("评审计划批量还原")
    @PostMapping("/restore")
    public BaseResult<Void> batchRestore(@RequestBody List<Long> ids) {
        reviewPlanBizService.batchRestore(ids);
        return BaseResult.ok();
    }

    /**
     * 全部清空
     */
    @PostMapping("/all/clear")
    @ApiOperation("删除的评审计划全部清空")
    public BaseResult<Void> clearAll() {
        reviewPlanBizService.clearAll();
        return BaseResult.ok();
    }

}
